package mj.scott.controller;

import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import mj.scott.common.Result;
import mj.scott.pojo.entity.Orders;
import mj.scott.service.IOrdersService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;

@RestController
@RequestMapping("/order")
@Api(tags = "订单管理")
public class OrderController {

    @Autowired
    private IOrdersService ordersService;

    /**
     * 商家查询订单列表（支持分页、按状态筛选）
     * @param page 页码
     * @param pageSize 每页条数
     * @param status 订单状态（可选）
     * @param tableNumber 桌号（可选，按桌号筛选）
     */
    @GetMapping("/page")
    @ApiOperation("商家查询订单列表")
    public Result<Page<Orders>> getOrderPage(
            @RequestParam Integer page,
            @RequestParam Integer pageSize,
            @RequestParam(required = false) Integer status,
            @RequestParam(required = false) String tableNumber) {
        Page<Orders> orderPage = ordersService.getOrderPage(page, pageSize, status, tableNumber);
        return Result.success(orderPage);
    }

    /**
     * 商家取消订单（只能取消"准备中"或"待付款"状态的订单）
     * @param id 订单ID
     */
    @PostMapping("/cancel/{id}")
    @ApiOperation("商家取消订单")
    public Result<String> cancelOrder(@PathVariable Long id) {
        ordersService.cancelOrder(id);
        return Result.success("订单已取消");
    }

    /**
     * 更新订单状态（如：准备中→已上菜）
     * @param id 订单ID
     * @param status 目标状态（1-5）
     */
    @PutMapping("/status/{id}")
    @ApiOperation("更新订单状态")
    public Result<String> updateOrderStatus(
            @PathVariable Long id,
            @RequestParam Integer status) {
        ordersService.updateOrderStatus(id, status);
        return Result.success("订单状态已更新为：" + getStatusDesc(status));
    }

    /**
     * 更新支付状态（如：未支付→已支付）
     * @param id 订单ID
     * @param payStatus 支付状态（0-2）
     */
    @PutMapping("/payStatus/{id}")
    @ApiOperation("更新支付状态")
    public Result<String> updatePayStatus(
            @PathVariable Long id,
            @RequestParam Integer payStatus) {
        ordersService.updatePayStatus(id, payStatus);
        return Result.success("支付状态已更新为：" + getPayStatusDesc(payStatus));
    }

    // 辅助方法：订单状态描述
    private String getStatusDesc(Integer status) {
        switch (status) {
            case 1: return "准备中";
            case 2: return "已上菜";
            case 3: return "待付款";
            case 4: return "已付款";
            case 5: return "退款";
            default: return "未知状态";
        }
    }

    // 辅助方法：支付状态描述
    private String getPayStatusDesc(Integer payStatus) {
        switch (payStatus) {
            case 0: return "未支付";
            case 1: return "已支付";
            case 2: return "退款";
            default: return "未知状态";
        }
    }
}